package com.web.kdl.service.excel;

import com.web.kdl.pojo.Vo.ExportTaskVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 导出任务管理器（内存存储）
 */
@Slf4j
@Component
public class ExportTaskManager {
    
    // 使用内存存储任务状态，重启后会丢失
    // 如果需要持久化，可以改用 Redis 或数据库
    private final Map<String, ExportTaskVO> taskMap = new ConcurrentHashMap<>();

    /**
     * 创建任务
     */
    public ExportTaskVO createTask(String taskId) {
        ExportTaskVO task = ExportTaskVO.pending(taskId);
        taskMap.put(taskId, task);
        log.info("创建导出任务：{}", taskId);
        return task;
    }

    /**
     * 更新任务状态为处理中
     */
    public void updateProcessing(String taskId) {
        ExportTaskVO task = taskMap.get(taskId);
        if (task != null) {
            task.setStatus(com.web.kdl.enums.ExportTaskStatus.PROCESSING);
            task.setMessage("正在生成文件...");
        }
    }

    /**
     * 更新任务状态为成功
     */
    public void updateSuccess(String taskId, String filePath, String fileName, Integer totalRows, Long startTime) {
        ExportTaskVO task = ExportTaskVO.success(taskId, filePath, fileName, totalRows, startTime);
        taskMap.put(taskId, task);
        log.info("任务 {} 执行成功，共 {} 行数据", taskId, totalRows);
    }

    /**
     * 更新任务状态为失败
     */
    public void updateFailed(String taskId, String errorMsg, Long startTime) {
        ExportTaskVO task = ExportTaskVO.failed(taskId, errorMsg, startTime);
        taskMap.put(taskId, task);
        log.error("任务 {} 执行失败：{}", taskId, errorMsg);
    }

    /**
     * 查询任务状态
     */
    public ExportTaskVO getTask(String taskId) {
        return taskMap.get(taskId);
    }

    /**
     * 删除任务（可选，用于清理过期任务）
     */
    public void removeTask(String taskId) {
        taskMap.remove(taskId);
        log.info("删除任务：{}", taskId);
    }
}
